<script>
  /**
   * @param {number[]} nums
   * @param {number[]} removeQueries
   * @return {number[]}
   */

  const find = (p, x) => {
    if (p[x] !== x) p[x] = find(p, p[x])
    return p[x]
  }

  var maximumSegmentSum = function (nums, removeQueries) {
    // p 为父节点， s为当前连通子树的和
    let n = nums.length, p = Array.from({ length: n }, (v, i) => i), s = Array(n).fill(0), max = 0, ans = []

    for (let i = n - 1; i >= 0; i--) {
      let x = removeQueries[i]
      s[x] = nums[x]
      // 这里取当前数为x, 尝试和 x + 1，x - 1 进行连通
      for (let j = x - 1; j <= x + 1; j += 2) {
        // 如果x + 1 或者 x - 1 边界是合法的  且 已经插入过了  触发合并
        if (j >= 0 && j < n && s[j]) {
          s[x] += s[find(p, j)]
          p[find(p, j)] = x
        }
      }
      // 因为题目正序 是先删除 后算结果，那反过来 应该先算结果 后插入值
      ans.push(max)
      max = Math.max(s[x], max)
    }

    return ans.reverse()
  };
  console.log(maximumSegmentSum(nums = [1, 2, 5, 6, 1], removeQueries = [0, 3, 2, 4, 1])) 
</script>